﻿//using System;
//using System.Collections;
//using System.Collections.Generic;
//using System.Collections.ObjectModel;
//using System.Text;

//namespace zevenseas.Community.Search
//{
//    public class WhereStatement
//    {
//        private string firstWhereProperty;
//        private List<WhereProperty> whereProperties;
//        private string keywords;
//        private SearchTypes keywordsType;
//        private List<string> scopes;

//        public List<string> Scopes
//        {
//            get { return scopes; }
//            set { scopes = value; }
//        }

//        public string Keywords
//        {
//            get { return keywords; }
//            set { keywords = value; }
//        }

//        public SearchTypes KeywordsType
//        {
//            get { return keywordsType; }
//            set { keywordsType = value; }
//        }

//        public WhereStatement()
//        {
//            whereProperties = new List<WhereProperty>();
//        }

//        public string FirstWhereProperty
//        {
//            get
//            {
//                if (string.IsNullOrEmpty(firstWhereProperty))
//                    return whereProperties[0].Property;
//                else
//                    return firstWhereProperty;
//            }
//            set { firstWhereProperty = value; }
//        }

//        public List<WhereProperty> WhereProperties
//        {
//            get { return whereProperties; }
//            set { whereProperties = value; }
//        }

//        private string GetScopeStatement()
//        {
//            if (scopes.Count < 1)
//                return string.Empty;

//            StringBuilder scopeStatement = new StringBuilder();

//            if (WhereProperties.Count > 0 || !string.IsNullOrEmpty(Keywords))
//                scopeStatement.Append(" AND ");

//            scopeStatement.Append("(");
//            foreach (string scope in Scopes)
//            {
//                scopeStatement.Append(@" (""SCOPE"" = '");
//                scopeStatement.Append(scope);
//                scopeStatement.Append(@"') OR");
//            }

//            scopeStatement.Remove(scopeStatement.Length - 2, 2);
//            scopeStatement.Append(") ");
//            return scopeStatement.ToString();
//        }

//        public override string ToString()
//        {
//            int insertPoint;
//            StringBuilder whereStatement = new StringBuilder();

//            if (whereProperties.Count == 0 && string.IsNullOrEmpty(keywords) && scopes.Count == 0)
//                return whereStatement.ToString();

//            whereStatement.Append(@"WHERE ");
//            insertPoint = whereStatement.Length;

//            if (!String.IsNullOrEmpty(Keywords))
//            {
//                switch (KeywordsType)
//                {
//                    case SearchTypes.Contains:
//                        whereStatement.Append(@"CONTAINS ('""");
//                        whereStatement.Append(Keywords);
//                        whereStatement.Append(@"""')");
//                        break;
//                    case SearchTypes.FreeText:
//                        whereStatement.Append(@"FREETEXT(DefaultProperties, '");
//                        whereStatement.Append(Keywords);
//                        whereStatement.Append(@"')");
//                        break;
//                }
//                insertPoint = whereStatement.Length;
//            }

//            foreach (WhereProperty property in whereProperties)
//            {
//                if (property.Property == FirstWhereProperty && string.IsNullOrEmpty(Keywords))
//                {
//                    whereStatement.Insert(insertPoint, property.ToString());
//                }
//                else if (property.Property == FirstWhereProperty && !string.IsNullOrEmpty(Keywords))
//                {
//                    whereStatement.Insert(insertPoint, " AND ( "); //Should move this into a Keyword Property.
//                    insertPoint = insertPoint + 7;
//                    whereStatement.Insert(insertPoint, property.ToString());
//                }
//                else
//                {
//                    whereStatement.Append(property.GetWhereProperty());
//                }
//            }

//            if (whereProperties.Count > 0 && !string.IsNullOrEmpty(Keywords))
//                whereStatement.Append(" )");

//            whereStatement.Append(GetScopeStatement());

//            return whereStatement.ToString();
//        }
    
//    }
//}